package com.example.controller;

import com.bob.auth.dto.response.ApiResponse;
import com.example.service.SimpleRemoteImportService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 简化版远程数据导入控制器
 * 直接导入，返回简单结果
 */
@Slf4j
@RestController
@RequestMapping("/api/simple-remote")
public class SimpleRemoteImportController {
    
    @Resource
    private SimpleRemoteImportService simpleRemoteImportService;
    
    /**
     * 导入当天的员工文件（简化版）
     * 只导入文件名中日期为当天的EMPLOYEE文件
     * 直接解析入库，只返回成功/失败
     */
    @PostMapping("/import/employee/all")
    public ApiResponse<String> importAllEmployees() {
        log.info("接收到简化导入请求：导入当天员工文件");
        
        try {
            simpleRemoteImportService.importEmployeesFromRemote();
            return ApiResponse.success("当天员工数据导入成功");
        } catch (Exception e) {
            log.error("导入失败", e);
            return ApiResponse.error(500, "导入失败：" + e.getMessage());
        }
    }
    
    /**
     * 按模式导入员工文件
     * 
     * @param filePattern 文件名模式（如：*.dat, NHR_*.dat）
     */
    @PostMapping("/import/employee/pattern")
    public ApiResponse<String> importEmployeesByPattern(
            @RequestParam String filePattern) {
        
        log.info("接收到简化导入请求：文件模式={}", filePattern);
        
        try {
            simpleRemoteImportService.importEmployeesByPattern(filePattern);
            return ApiResponse.success("导入成功");
        } catch (Exception e) {
            log.error("导入失败", e);
            return ApiResponse.error(500, "导入失败：" + e.getMessage());
        }
    }
    
    /**
     * 导入单个员工文件
     * 
     * @param fileName 文件名（不含路径）
     */
    @PostMapping("/import/employee/single")
    public ApiResponse<String> importSingleFile(
            @RequestParam String fileName) {
        
        log.info("接收到简化导入请求：文件名={}", fileName);
        
        try {
            simpleRemoteImportService.importSingleFile(fileName);
            return ApiResponse.success("导入成功");
        } catch (Exception e) {
            log.error("导入失败", e);
            return ApiResponse.error(500, "导入失败：" + e.getMessage());
        }
    }
    
    /**
     * 测试SFTP连接
     */
    @GetMapping("/test-connection")
    public ApiResponse<Boolean> testConnection() {
        log.info("测试SFTP连接");
        
        try {
            boolean connected = simpleRemoteImportService.testConnection();
            
            if (connected) {
                return ApiResponse.success(true, "✅ SFTP连接成功！");
            } else {
                return ApiResponse.error(500, "❌ SFTP连接失败", false);
            }
        } catch (Exception e) {
            log.error("连接测试失败", e);
            return ApiResponse.error(500, "❌ 连接测试失败：" + e.getMessage(), false);
        }
    }
    
    /**
     * 获取SFTP连接状态详情
     */
    @GetMapping("/connection-status")
    public ApiResponse<String> getConnectionStatus() {
        log.info("获取SFTP连接状态");
        
        try {
            String status = simpleRemoteImportService.getConnectionStatus();
            return ApiResponse.success(status);
        } catch (Exception e) {
            log.error("获取连接状态失败", e);
            return ApiResponse.error(500, "获取状态失败：" + e.getMessage());
        }
    }
    
    /**
     * 列出远程所有文件
     */
    @GetMapping("/list-files")
    public ApiResponse<List<String>> listRemoteFiles() {
        log.info("列出远程所有文件");
        
        try {
            List<String> files = simpleRemoteImportService.listRemoteFiles();
            return ApiResponse.success(files, "共找到 " + files.size() + " 个文件");
        } catch (Exception e) {
            log.error("列出文件失败", e);
            return ApiResponse.error(500, "列出文件失败：" + e.getMessage());
        }
    }
    
    /**
     * 列出当天的员工数据文件
     * 只返回文件名中日期为当天的EMPLOYEE文件
     */
    @GetMapping("/list-today-files")
    public ApiResponse<List<String>> listTodayEmployeeFiles() {
        log.info("列出当天的员工数据文件");
        
        try {
            List<String> files = simpleRemoteImportService.listTodayEmployeeFiles();
            
            if (files.isEmpty()) {
                return ApiResponse.success(files, "⚠️ 未找到当天的员工数据文件");
            }
            
            return ApiResponse.success(files, "✅ 找到 " + files.size() + " 个当天员工文件");
        } catch (Exception e) {
            log.error("列出当天文件失败", e);
            return ApiResponse.error(500, "列出当天文件失败：" + e.getMessage());
        }
    }
}
